home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / CIncludes / Navigation.h < prev    next >
C/C++ Source or Header  |  1996-05-01  |  8KB  |  239 lines

  1. /*
  2.      File:        Navigation.h
  3.  
  4.      Contains:    Navigation Services Interfaces
  5.  
  6.      Version:    Technology:    System 8
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. */
  18. #ifndef __NAVIGATION__
  19. #define __NAVIGATION__
  20.  
  21. #ifndef __TYPES__
  22. #include <Types.h>
  23. #endif
  24. #ifndef __APPLEEVENTS__
  25. #include <AppleEvents.h>
  26. #endif
  27. #ifndef __FILES__
  28. #include <Files.h>
  29. #endif
  30. #ifndef __EVENTS__
  31. #include <Events.h>
  32. #endif
  33. #ifndef __MIXEDMODE__
  34. #include <MixedMode.h>
  35. #endif
  36. #ifndef __SCRIPT__
  37. #include <Script.h>
  38. #endif
  39. #ifndef __TEXTOBJECTS__
  40. #include <TextObjects.h>
  41. #endif
  42. #ifndef __TIMEOBJECTS__
  43. #include <TimeObjects.h>
  44. #endif
  45.  
  46. #ifdef __cplusplus
  47. extern "C" {
  48. #endif
  49.  
  50. #if PRAGMA_IMPORT_SUPPORTED
  51. #pragma import on
  52. #endif
  53.  
  54. #if PRAGMA_ALIGN_SUPPORTED
  55. #pragma options align=mac68k
  56. #endif
  57.  
  58. #if FOR_SYSTEM8_COOPERATIVE
  59. #if FOR_PTR_BASED_AE
  60.  
  61. enum {
  62.     gestaltNavigationServicesAttr = 'nvsv',
  63.     gestaltNavigationServicesPresent = 0
  64. };
  65.  
  66. /* Values for the "action" parameter of NavAskSaveChanges */
  67.  
  68. enum {
  69.     kNavSaveChangesClosingDocument = 1,                            /* Closing a document */
  70.     kNavSaveChangesQuittingApplication = 2,                        /* Quitting the app */
  71.     kNavSaveChangesOther        = 0                                /* Neither closing nor quitting */
  72. };
  73.  
  74. typedef UInt16 NavAskSaveChangesAction;
  75. /* NavFileInfo is the part of NavFileOrFolderInfo for files */
  76. struct NavFileInfo {
  77.     Boolean                         locked;
  78.     Boolean                         resourceOpen;
  79.     Boolean                         dataOpen;
  80.     Boolean                         reserved;
  81.     unsigned long                     dataSize;
  82.     unsigned long                     resourceSize;
  83.     FInfo                             finderInfo;
  84.     FXInfo                             moreFinderInfo;
  85. };
  86. typedef struct NavFileInfo NavFileInfo;
  87.  
  88. /* NavFolderInfo is the part of NavFileOrFolderInfo for folders and volumes */
  89. struct NavFolderInfo {
  90.     Boolean                         shareable;
  91.     Boolean                         sharePoint;
  92.     Boolean                         mounted;
  93.     Boolean                         readable;
  94.     Boolean                         writeable;
  95.     Boolean                         reserved;
  96.     unsigned long                     numberOfFiles;
  97.     DInfo                             finderInfo;
  98.     DXInfo                             moreFinderInfo;
  99. };
  100. typedef struct NavFolderInfo NavFolderInfo;
  101.  
  102. /* NavFileOrFolderInfo is the structure passed to your filter proc for typeFSS AEDescs */
  103. struct NavFileOrFolderInfo {
  104.     Boolean                         isFolder;
  105.     Boolean                         visible;
  106.     TimeObject                         creationDate;
  107.     TimeObject                         modificationDate;
  108.     union {
  109.         NavFileInfo                     fileInfo;
  110.         NavFolderInfo                     folderInfo;
  111.     }                                 u;
  112. };
  113. typedef struct NavFileOrFolderInfo NavFileOrFolderInfo;
  114.  
  115. typedef pascal Boolean (*NavEventProcPtr)(const EventRecord *event, void *contextPtr);
  116. typedef pascal Boolean (*NavObjectFilterProcPtr)(AEDesc *theItem, void *info, void *contextPtr);
  117.  
  118. #if GENERATINGCFM
  119. typedef UniversalProcPtr NavEventUPP;
  120. typedef UniversalProcPtr NavObjectFilterUPP;
  121. #else
  122. typedef NavEventProcPtr NavEventUPP;
  123. typedef NavObjectFilterProcPtr NavObjectFilterUPP;
  124. #endif
  125. struct NavDialogOptions {
  126.     Point                             location;                    /* Top-left of the dialog, or (-1, -1) for default position */
  127.     TextObject                         banner;                        /* Optional banner text displayed in the dialog */
  128.     TextObject                         defaultButtonLabel;            /* Label of the default button (or null string for default) */
  129.     void *                            customPanel;                /* Custom SOM panel to be inserted, if any */
  130. };
  131. typedef struct NavDialogOptions NavDialogOptions;
  132.  
  133. struct NavReplyRecord {
  134.     Boolean                         validRecord;                /* True if the user confirmed the selection, false on cancel */
  135.     Boolean                         replacing;                    /* True if we are overwriting an existing object (put only) */
  136.     AEDesc                             selection;                    /* AppleEvent descriptor of the selected object */
  137. };
  138. typedef struct NavReplyRecord NavReplyRecord;
  139.  
  140. /* return values from NavAskSaveChanges, NavCustomAskSaveChanges */
  141.  
  142. enum {
  143.     askSaveChangesSave            = 1,
  144.     askSaveChangesCancel        = 2,
  145.     askSaveChangesDontSave        = 3
  146. };
  147.  
  148. typedef UInt16 NavAskSaveChangesResult;
  149. /*
  150.  To specify which types of data you are willing to receive, use the NavTypeList.
  151.  *
  152.  * This is not a list of file types; that must be specified in an 'open' resource
  153.  * if you are displaying files, or you can use a filter procedure. It is a list of
  154.  * AEDesc types. Only items which can be coerced to these descriptor types will be
  155.  * displayed in the list, descended into as containers, or returned in a reply.
  156.  * The list is terminated by a null entry and may be of any length.  At present
  157.  * only typeFSS and typeAlias are supported.
  158.  *
  159.  * If you include typeAlias in the list, then aliases of all types will be allowed,
  160.  * and aliases will not be resolved before they are given to you. Otherwise, aliases
  161.  * will be resolved internally and you will be passed their resolved AEDescs if
  162.  * they can be coerced into one of the types you want.
  163. */
  164. typedef DescType NavTypeList[4];
  165. typedef const DescType *ConstNavTypeListPtr;
  166. /*
  167.  *    Navigation Services Dialogs
  168. */
  169. extern pascal OSErr NavAskSaveChanges(ConstTextObject applicationName, ConstTextObject documentName, NavAskSaveChangesAction action, NavAskSaveChangesResult *reply, Point location, NavEventUPP eventProc, void *contextPtr);
  170.  
  171. extern pascal OSErr NavCustomAskSaveChanges(ConstTextObject message, NavAskSaveChangesResult *reply, Point location, NavEventUPP eventProc, void *contextPtr);
  172.  
  173. extern pascal OSErr NavGetObject(const AEDesc *defaultObject, NavReplyRecord *reply, NavDialogOptions *dialogOptions, short openResourceID, ConstNavTypeListPtr typeList, NavObjectFilterUPP filterProc, NavEventUPP eventProc, void *contextPtr);
  174.  
  175. extern pascal OSErr NavPutObject(const AEDesc *defaultObject, NavReplyRecord *reply, NavDialogOptions *dialogOptions, NavEventUPP eventProc, void *contextPtr);
  176.  
  177. /*
  178.  * Generating unique file names
  179. */
  180. extern OSErr MakeUniqueNameInFolder(FSSpec *folder, TextObject *name);
  181.  
  182.  
  183. #if GENERATINGCFM
  184. #else
  185. #endif
  186.  
  187. enum {
  188.     uppNavEventProcInfo = kPascalStackBased
  189.          | RESULT_SIZE(SIZE_CODE(sizeof(Boolean)))
  190.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(const EventRecord *)))
  191.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(void *))),
  192.     uppNavObjectFilterProcInfo = kPascalStackBased
  193.          | RESULT_SIZE(SIZE_CODE(sizeof(Boolean)))
  194.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(AEDesc *)))
  195.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(void *)))
  196.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(void *)))
  197. };
  198.  
  199. #if GENERATINGCFM
  200. #define NewNavEventProc(userRoutine)        \
  201.         (NavEventUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppNavEventProcInfo, GetCurrentArchitecture())
  202. #define NewNavObjectFilterProc(userRoutine)        \
  203.         (NavObjectFilterUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppNavObjectFilterProcInfo, GetCurrentArchitecture())
  204. #else
  205. #define NewNavEventProc(userRoutine)        \
  206.         ((NavEventUPP) (userRoutine))
  207. #define NewNavObjectFilterProc(userRoutine)        \
  208.         ((NavObjectFilterUPP) (userRoutine))
  209. #endif
  210.  
  211. #if GENERATINGCFM
  212. #define CallNavEventProc(userRoutine, event, contextPtr)        \
  213.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppNavEventProcInfo, (event), (contextPtr))
  214. #define CallNavObjectFilterProc(userRoutine, theItem, info, contextPtr)        \
  215.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppNavObjectFilterProcInfo, (theItem), (info), (contextPtr))
  216. #else
  217. #define CallNavEventProc(userRoutine, event, contextPtr)        \
  218.         (*(userRoutine))((event), (contextPtr))
  219. #define CallNavObjectFilterProc(userRoutine, theItem, info, contextPtr)        \
  220.         (*(userRoutine))((theItem), (info), (contextPtr))
  221. #endif
  222. #endif
  223. #endif
  224.  
  225. #if PRAGMA_ALIGN_SUPPORTED
  226. #pragma options align=reset
  227. #endif
  228.  
  229. #if PRAGMA_IMPORT_SUPPORTED
  230. #pragma import off
  231. #endif
  232.  
  233. #ifdef __cplusplus
  234. }
  235. #endif
  236.  
  237. #endif /* __NAVIGATION__ */
  238.  
  239.